home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / pcfig4th.zip / STUFF.SCR < prev    next >
Text File  |  1985-02-04  |  15KB  |  1 lines

  1. ( utilities: printing: FINEPRINT, 2UP )                         FORTH DEFINITIONS DECIMAL ( for Epson MX series printers )      : ESC     27 EMIT ;                                             : FINEPRINT  1 PRINTER !  ESC 70 EMIT ( no emphasized mode! )         15 EMIT ESC 48 EMIT ( SO ESC "0" = condensed, 8 l/in )          ESC 67 88 EMIT EMIT ( 88 l/page ) 0 PRINTER ! CLS ;       : 64LINE  (LINE) DROP 64 TYPE ;                                 : FILLS   0 DO 61 EMIT LOOP ;                                   : HEAD    24 FILLS SPACE SPACE ." Screen  "                               0 <# # # # # #> TYPE SPACE SPACE 24 FILLS ;           : 2UP ( scr1 scr2 --    print 2 screens/page )                        SWAP  2DUP CR 3 SPACES HEAD SPACE HEAD CR                       16 0 DO  2DUP                                                     I 2 .R SPACE  I SWAP 64LINE  SPACE I SWAP .LINE CR            LOOP DROP DROP ;                                          ;S                                                              ( utilities: disc copy primitives  )                            FORTH DEFINITIONS                                               320 CONSTANT MAXREC                                             : PAUSE ." hit any key to continue..." KEY DROP ;               : FILL   ( n -- ; load up all the buffers, starting at block n)      #BUFF OVER + SWAP   ( marking them to be flushed to DR1 )       DO                                                                 I MAXREC > 0=                                                   IF  I MAXREC + I BLOCK 2- ! UPDATE                              ELSE LEAVE ENDIF                                             LOOP ;                                                     : BLOCK0  ( -- ; kludge to access BLOCK 0 )                          FIRST LIMIT OVER - BLANKS ;                                : NL CR 0 OUT ! ." Block" ;  : NL?  OUT @ 70 > IF NL THEN ;     : DISPLAY  NL? 7 .R ;                                           -->                                                             ( utilities: DISKCOPY  )                                        : DISKCOPY  ( -- ; copies DR0 to DR1, regardless of content )        CR ." Place source disk in drive A, destination disk in "          ." drive B." CR ." ANY FILES ON THE DESTINATION DISK "          ." WILL BE LOST !!" CR PAUSE ." please wait" CR              FLUSH DR0 0 DRIVE ! BLOCK0                                      MAXREC 0                                                        DO                                                                 I DISPLAY I FILL FLUSH                                       #BUFF +LOOP                                                     CR CR ." Disk copy finished.   " ;                         ;S                                                              ( note: this takes about 10 minutes with only 4 buffers ! )                                                                                                                                                                                                     ( TRIG LOOKUP ROUTINES WITH SINE * 10000 TABLE )                : TABLE ( ... N -> , CREATE 'TABLE' DATA TYPE  )                  <BUILDS 0 DO , LOOP   ( COMPILE N ELEMENTS )                    DOES> SWAP 2 * + @    ( EXECUTE TABLE LOOKUP )                ;                                                               10000 9998 9994 9986 9976 9962 9945 9925 9903 9877               9848 9816 9781 9744 9703 9659 9613 9563 9511 9455               9397 9336 9272 9205 9135 9063 8988 8910 8829 8746               8660 8572 8480 8387 8290 8192 8090 7986 7880 7771               7660 7547 7431 7314 7193 7071 6947 6820 6691 6561               6428 6293 6157 6018 5878 5736 5592 5446 5299 5150               5000 4848 4695 4540 4384 4226 4067 3907 3746 3584               3420 3256 3090 2924 2756 2588 2419 2250 2079 1908               1736 1564 1391 1219 1045 0872 0698 0523 0349 0175               0000 ( 91 ELEMENTS OF TABLE PLACED ON STACK )                   91 TABLE SINTABLE -->                                          ( TRIG TABLE LOOKUP ROUTINES, CONTINUED )                       : S180 ( N -> N  RETURNS SINE 0-180 DEGREES )                     DUP 90 >   ( IF GREATER THAN 90 DEGREES )                       IF 180 SWAP - ENDIF ( SUBTRACT FROM 180 )                       SINTABLE ( THEN TAKE SINE )                                   ;                                                               : SIN  ( N -> SINE  RETURN SINE OF ANY NO. OF DEGREES )           360 MOD   ( BRING WITHIN + OR - 360 )                           DUP 0< IF 360 + ENDIF ( IF NEGATIVE, ADD 360 )                  DUP 180 >  ( TEST IF GREATER THAN 180 )                         IF 180 - S180 MINUS ( IF SO, SUBTRACT 180, NEGATE SINE )        ELSE S180 ENDIF ( OTHERWISE, STRAIGHTFORWARD )                ;                                                               : COS  ( N -> COSINE )                                            360 MOD ( PREVENT OVERFLOW NEAR 32767 )                         90 + SIN ; ( COS IS SIN WITH 90 DEG PHASE SHIFT )             ( THE GAME OF LIFE, ADAPTED FROM DAVE BOULTON )                 ( FORTH DIMENSIONS III/5 PAGE 24 )                              FORTH DEFINITIONS DECIMAL : TASK ; 8 LOAD                       DECIMAL 39 CONSTANT XLEN 22 CONSTANT YLEN                       XLEN YLEN 2ARRAY UNIVERSE 0 VARIABLE #GENERATION                : J RP@ 6 + @ ;                                                 : CHECK DUP 3 = IF DROP 2+ ELSE 2 = 0=                            IF 4 + ENDIF ENDIF ;                                          : CLEAR  YLEN 0 DO XLEN 0 DO I J UNIVERSE                         0 SWAP C! LOOP LOOP ;                                         : DISPLAY CLS ." Generation " #GENERATION @ .                     YLEN 0 DO XLEN 0 DO                                             I J UNIVERSE C@   IF I 2 * J GOTOXY 42 EMIT ENDIF               LOOP LOOP HOME ;                                              -->                                                                                                                             ( THE GAME OF LIFE, CONTINUED )                                 : X-      1 - DUP 0 < IF DROP XLEN 1 - ENDIF ;                  : X+      1 + DUP XLEN = IF DROP 0 ENDIF ;                      : Y-      1 - DUP 0 < IF DROP YLEN 1 - ENDIF ;                  : Y+      1 + DUP YLEN = IF DROP 0 ENDIF ;                      : CELL C@ 1 AND + ;                                             : GENERATE                                                        YLEN 0 DO XLEN 0 DO  0                                          I X- J UNIVERSE CELL I X+ J  UNIVERSE CELL                      I X- J Y+ UNIVERSE CELL I J Y+ UNIVERSE CELL                    I X+ J Y+ UNIVERSE CELL  I X- J Y- UNIVERSE CELL                I J Y- UNIVERSE CELL  I X+ J Y- UNIVERSE CELL                   I J UNIVERSE C@   1 AND SWAP CHECK   I J UNIVERSE C!            LOOP LOOP ;                                                   -->                                                                                                                             ( THE GAME OF LIFE, CONTINUED )                                 0 VARIABLE CUR 0 VARIABLE SETUPFLAG                             : .CUR CUR @ XLEN /MOD SWAP DUP + SWAP GOTOXY ;    : !CUR 0     MAX YLEN XLEN * 1 - MIN CUR ! ;   : +CUR CUR @ + !CUR ;         : +.CUR +CUR .CUR ; : +LIN CUR @ XLEN / + XLEN * !CUR ;         HEX 1B CONSTANT EXITFLAG 50 CONSTANT DOWNCURSOR                 0D CONSTANT NEWLINE 08 CONSTANT BACKCURSOR DECIMAL              : SETUPLIFE CLS ." Enter starting pattern     "                 ."            push <ESC> when finished " CR                     0 SETUPFLAG ! 0 CUR ! .CUR BEGIN KEY CASE EXITFLAG OF 1         SETUPFLAG ! ENDOF DOWNCURSOR OF XLEN +.CUR ENDOF                BACKCURSOR OF -1 +.CUR ENDOF NEWLINE OF 1 +LIN .CUR ENDOF       32 OF 32 EMIT 0 CUR @ XLEN /MOD UNIVERSE C! 1 +.CUR ENDOF       42 OF 42 EMIT 1 CUR @ XLEN /MOD UNIVERSE C! 1 +.CUR ENDOF       ENDCASE SETUPFLAG @ UNTIL ;                                     -->                                                             ( THE GAME OF LIFE, CONTINUED )                                 : NORMALIZE YLEN 0 DO XLEN 0 DO                                   I J UNIVERSE DUP C@ DUP                                         4 AND IF DROP 0 ELSE 3 AND IF 1 ELSE 0 ENDIF ENDIF              SWAP C!                                                         LOOP LOOP ;                                                   : GENERATIONS 1 #GENERATION ! CLEAR SETUPLIFE                     0 DO DISPLAY GENERATE                                           NORMALIZE 1 #GENERATION +! LOOP                                 DISPLAY XLEN YLEN GOTOXY ;                                                                                                    ." Type 'n GENERATIONS <CR>' to play" ;S                                                                                                                                                                                                                                                                                        ( math: RANDOM  )                                               ( RANDOM NUMBER GENERATOR, J. E. Rickenbacker )                 ( FORTH DIMENSIONS II/2 PAGE 34               )                                                                                 FORTH DEFINITIONS DECIMAL                                                                                                       0 VARIABLE SEED                                                                                                                 : (RAND) SEED @ 259 * 3 + 32767 AND DUP SEED ! ;                                                                                 ( n -- r  : select a random # r, 0<= r < n )                   : RANDOM (RAND) 32767 */ ;                                                                                                                                                                                                                                                                                                      ( utilities: TIME? DATE? ET0 T-)                                FORTH DEFINITIONS DECIMAL                                       : ##        0 <# # # #> TYPE ;                                  : DATE?    DATE@ ## 47 EMIT ## 47 EMIT ## SPACE ;                                                                               0 VARIABLE [T] 2 ALLOT  0 VARIABLE [ET] 2 ALLOT                 : T>       [T] 2! [T] 2+ C@ ( csec ) [T] 3 + C@ ( sec )                           [T]    C@ ( min  ) [T] 1+  C@ ( hr  ) ;       : >T       [T] 1+  C! ( hr  ) [T] C! ( min )                               [T] 3 + C! ( sec ) [T] 2+ C! ( csec ) [T] 2@ ;       : -MOD100    - DUP 0< IF 100 + -1 ELSE 0 THEN ;                 : -MOD60     - DUP 0< IF 60  + -1 ELSE 0 THEN ;                 : -MOD24     - DUP 0< IF 24  + -1 ELSE 0 THEN ;                 : .T       ## 58 EMIT ## 58 EMIT ## 46 EMIT ## SPACE ;          : TIME?    TIME@ T> .T ;                                        -->                                                             ( time utilities: ET ET? )                                      0 VARIABLE [T0] 2 ALLOT     0 VARIABLE [T1] 2 ALLOT             : T-     [T0] 2!  [T1] 2!                                                [T1] 2+  C@   [T0] 2+  C@  -MOD100  ( delta csec )              [T1] 3 + C@ + [T0] 3 + C@  -MOD60   ( delta sec )               [T1]     C@ + [T0]     C@  -MOD60   ( delta min )               [T1] 1+  C@ + [T0] 1+  C@  -MOD24   ( delta hr ) ;     : ET0    TIME@ [ET] 2! ;    ( reset elapsed time )              : ET     TIME@ [ET] 2@ T- ; ( measure elapsed time )            : ET?    ET DROP .T ;                                           : >CS    60 * +  60 * +  100 * + ;                              : ET(S)  ET DROP >CS  0 <# # # 46 HOLD # # #> TYPE SPACE ;      ;S                                                                                                                                                                                                                                                              ( math: fixed point SQRT )                                      FORTH DEFINITIONS DECIMAL                                       : 2DROP   DROP DROP ;                                           : 2*      DUP + ;      : D2*    2DUP D+ ;                       : D<      ROT 2DUP = IF ROT ROT DMINUS D+ 0<                              ELSE  SWAP < SWAP DROP THEN  SWAP DROP ;              : DU<     32768 + ROT 32768 + ROT ROT D< ;                                                                                      : EBITS   0 DO  >R D2* D2*  R - DUP                                             0< IF R +  R> 2* 1-  ELSE R> 2* 3 + THEN LOOP ;                                                                 : 2SBIT   >R D2* DUP 0< IF  D2* R - R> 1+                                 ELSE  D2* R 2DUP  U< IF DROP R> 1- ELSE - R> 1+                 THEN THEN ;                                                                                                           -->                                                             ( math: SQRT, cont. )                                           : 1SBIT  >R DUP 0< IF 2DROP R> 1+                                        ELSE D2* 32768 R DU< 0= R> + THEN ;                    : SQRT   ( ud1 -- u2 )                                                   0 1 8 EBITS  ROT DROP  6 EBITS  2SBIT  1SBIT ;         : SQRT?  ( n --   ;print square root for n <= 4095 )                     16 *  62500 U* SQRT                                             0 <# # # # 46 HOLD #S #> TYPE SPACE ;                  ;S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ( SCRAMBLE )                                                    : SWAP-BASES  ( n1 n2 -- ; swaps bases n1 & n2 )                      BASES SWAP BASES 2DUP   C@ SWAP C@  ( a2 a1 [a1] [a2])          ROT C! SWAP C! ;                                                                                                          : SCRAMBLE  ( frag. -- ; scramble bases of frag )                     DUP .BASES + @ SWAP .LENGTH + @  2DUP OVER +  ( i l i f )       SWAP DO                                                              DUP RANDOM 3 PICK +  ( choose random position )                 I SWAP-BASES                                                    LOOP DROP DROP ;